package controller

import (
	"StrayAnimals/internal/service"
	"StrayAnimals/pkg/utils"
	"github.com/gin-gonic/gin"
)

// SendCaptcha 发送验证码
func SendCaptcha(c *gin.Context) {
	// 从网址参数中获取邮箱地址
	email := c.Query("email")

	// 验证邮箱是否为空
	if email == "" {
		c.JSON(400, gin.H{
			"code":    401,
			"message": "邮箱为空，无法发送验证码",
		})
		return
	}

	// 验证邮箱格式
	if !utils.IsValidEmail(email) {
		c.JSON(400, gin.H{
			"code":    402,
			"message": "邮箱格式不正确，无法发送验证码",
		})
		return
	}

	// 检查最近1分钟内是否已发送过验证码
	exists, err := service.IsCaptchaRecentlySent(email)
	if err != nil {
		c.JSON(500, gin.H{
			"code":    501,
			"message": "系统错误，请稍后再试；" + err.Error(),
		})
		return
	}
	if exists {
		c.JSON(400, gin.H{
			"code":    403,
			"message": "验证码已发送，请稍后再试",
		})
		return
	}

	// 生成验证码
	captcha := utils.GenerateCaptcha()

	// 存储验证码到Redis数据库
	if err := service.SaveCaptchaToDatabase(email, captcha); err != nil {
		c.JSON(500, gin.H{
			"code":    501,
			"message": "系统错误，请稍后再试" + err.Error(),
		})
		return
	}

	// 发送验证码到用户邮箱
	if err := service.SendCaptchaToUser(email, captcha); err != nil {
		c.JSON(500, gin.H{
			"code":    502,
			"message": "验证码发送失败，请稍后再试；" + err.Error(),
		})
		return
	}

	// 返回成功响应
	c.JSON(200, gin.H{
		"code":    200,
		"message": "验证码发送成功",
	})
}
